﻿using System;
using System.Collections.Generic;
using System.Text;
using DAL;
using System.Data;
using System.Data.SqlClient;
using System.Web;


namespace BLL
{
    public class Producto
    {
        #region propiedades

        #region Productos

        private int _PK_Producto;
        public int PK_Producto
        {
            get { return _PK_Producto; }
            set { _PK_Producto = value; }
        }

        private string _Consecutivo;

        public string Consecutivo
        {
            get { return _Consecutivo; }
            set { _Consecutivo = value; }
        }

        private int _FK_Genero;

        public int FK_Genero
        {
            get { return _FK_Genero; }
            set { _FK_Genero = value; }
        }

        private string _DescGenero;

        public string DescGenero
        {
            get { return _DescGenero; }
            set { _DescGenero = value; }
        }

        private int _FK_Pais;

        public int FK_Pais
        {
            get { return _FK_Pais; }
            set { _FK_Pais = value; }
        }

        private string _DescPais;

        public string DescPais
        {
            get { return _DescPais; }
            set { _DescPais = value; }
        }


        private int _FK_Idioma;

        public int FK_Idioma
        {
            get { return _FK_Idioma; }
            set { _FK_Idioma = value; }
        }


        private string _DescIdioma;

        public string DescIdioma
        {
            get { return _DescIdioma; }
            set { _DescIdioma = value; }
        }


        private int _Prod_TipoInterpretacion;

        public int Prod_TipoInterpretacion
        {
            get { return _Prod_TipoInterpretacion; }
            set { _Prod_TipoInterpretacion = value; }
        }

        private string _TipoInterpDesc;

        public string TipoInterpDesc
        {
            get { return _TipoInterpDesc; }
            set { _TipoInterpDesc = value; }
        }

        private int _Prod_Ano;

        public int Prod_Ano
        {
            get { return _Prod_Ano; }
            set { _Prod_Ano = value; }
        }

        private string _Prod_Nombre;

        public string Prod_Nombre
        {
            get { return _Prod_Nombre; }
            set { _Prod_Nombre = value; }
        }

        private decimal _Prod_Precio;
        public decimal Prod_Precio
        {
            get { return _Prod_Precio; }
            set { _Prod_Precio = value; }
        }

        private string _Prod_Disco;

        public string Prod_Disco
        {
            get { return _Prod_Disco; }
            set { _Prod_Disco = value; }
        }

        private string _Prod_NombreVisualizcion;

        public string Prod_NombreVisualizcion
        {
            get { return _Prod_NombreVisualizcion; }
            set { _Prod_NombreVisualizcion = value; }
        }

        private string _Prod_NombrePreVisualizcion;

        public string Prod_NombrePreVisualizcion
        {
            get { return _Prod_NombrePreVisualizcion; }
            set { _Prod_NombrePreVisualizcion = value; }
        }

         
              private string _Prod_Matriz;

        public string Prod_Matriz
        {
            get { return _Prod_Matriz; }
            set { _Prod_Matriz = value; }
        }






        private int _FK_TipoProducto;

        public int FK_TipoProducto
        {
            get { return _FK_TipoProducto; }
            set { _FK_TipoProducto = value; }
        }


        #endregion





        private string _mensaje;

        public string mensaje
        {
            get { return _mensaje; }
            set { _mensaje = value; }
        }

        private int _num_error;

        public int num_error
        {
            get { return _num_error; }
            set { _num_error = value; }
        }
        #endregion

        #region variables privadas
        SqlConnection conexion;
        string mensaje_error;
        int numero_error;
        string sql;
        DataSet ds;
        #endregion

        #region metodos

        public void insertaError()
        {
            ErrorL objerror = new ErrorL();
            objerror.mensaje = _mensaje;
            objerror.num_error = _num_error;
            objerror.URL = HttpContext.Current.Request.Url.AbsoluteUri;
            objerror.Fecha = DateTime.Now;
            objerror.guardar_Error();
        }


        public bool agregar_producto()
        {
            conexion = cls_DAL.trae_conexion("Progra5", ref mensaje_error, ref numero_error);
            if (conexion == null)
            {
                //insertar en la table de errores
                insertaError();
                HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                return false;
            }
            else
            {

                sql = "usp_ProductoGuardar";
                
                ParamStruct[] parametros = new ParamStruct[14];
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 0, "@PK_Producto", SqlDbType.Int, _PK_Producto);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 1, "@Consecutivo", SqlDbType.VarChar, _Consecutivo);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 2, "@FK_Genero", SqlDbType.Int, _FK_Genero);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 3, "@FK_Pais", SqlDbType.Int, _FK_Pais);

                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 4, "@FK_Idioma", SqlDbType.Int, _FK_Idioma);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 5, "@Prod_Nombre", SqlDbType.VarChar, _Prod_Nombre);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 6, "@Prod_Ano", SqlDbType.Int, _Prod_Ano);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 7, "@Prod_Precio", SqlDbType.Money, _Prod_Precio);

                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 8, "@Prod_Disco", SqlDbType.NVarChar, _Prod_Disco);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 9, "@Prod_TipoInterpretacion", SqlDbType.Int, _Prod_TipoInterpretacion);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 10, "@Prod_NombreVisualizcion", SqlDbType.NVarChar, _Prod_NombreVisualizcion);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 11, "@Prod_NombrePreVisualizcion", SqlDbType.NVarChar, _Prod_NombrePreVisualizcion);

                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 12, "@FK_TipoProducto", SqlDbType.Int, _FK_TipoProducto);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 13, "@Prod_Matriz", SqlDbType.VarChar, _Prod_Matriz);
                

                cls_DAL.conectar(conexion, ref mensaje_error, ref numero_error);
                cls_DAL.ejecuta_sqlcommand(conexion, sql, true, parametros, ref mensaje_error, ref numero_error);

                if (numero_error != 0)
                {
                    //insertar en la table de errores
                    insertaError();
                    HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                    cls_DAL.desconectar(conexion, ref mensaje_error, ref numero_error);
                    return false;
                }
                else
                {
                    cls_DAL.desconectar(conexion, ref mensaje_error, ref numero_error);
                    return true;
                }
            }
        }


        public bool eliminar_producto(int cod_producto)
        {
            conexion = cls_DAL.trae_conexion("Progra5", ref mensaje_error, ref numero_error);
            if (conexion == null)
            {
                //insertar en la table de errores
                insertaError();
                HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                return false;
            }
            else
            {
                sql = "usp_Productos_Eliminar";
                ParamStruct[] parametros = new ParamStruct[1];
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 0, "@PK_Producto", SqlDbType.Int, cod_producto);
                cls_DAL.conectar(conexion, ref mensaje_error, ref numero_error);
                cls_DAL.ejecuta_sqlcommand(conexion, sql, true, parametros, ref mensaje_error, ref numero_error);
                if (numero_error != 0)
                {
                    //insertar en la table de errores
                    insertaError();
                    HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                    cls_DAL.desconectar(conexion, ref mensaje_error, ref numero_error);
                    return false;
                }
                else
                {
                    cls_DAL.desconectar(conexion, ref mensaje_error, ref numero_error);
                    return true;
                }
            }
        }

        #region Libros


        public DataSet carga_lista_libros()
        {
            conexion = cls_DAL.trae_conexion("Progra5", ref mensaje_error, ref numero_error);
            if (conexion == null)
            {
                //insertar en la table de errores
                insertaError();
                 HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                return null;
            }
            else
            {
                sql = "usp_LibrosConsultar";
                insertaError();
                ds = cls_DAL.ejecuta_dataset(conexion, sql, true, ref mensaje_error, ref numero_error);
                if (numero_error != 0)
                {
                    //insertar en la table de errores
                     HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                    return null;
                }
                else
                {
                    return ds;
                }
            }

        }


        public void carga_datos_libro(int cod_libro)
        {
            conexion = cls_DAL.trae_conexion("Progra5", ref mensaje_error, ref numero_error);
            if (conexion == null)
            {
                //insertar en la table de errores
                 HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
            }
            else
            {
                sql = "usp_Libros_InfoConsultar";
                ParamStruct[] parametros = new ParamStruct[1];
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 0, "@PK_Producto", SqlDbType.Int, cod_libro);
                ds = cls_DAL.ejecuta_dataset(conexion, sql, true, parametros, ref mensaje_error, ref numero_error);
                if (numero_error != 0)
                {
                    //insertar en la table de errores
                     HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                }
                else
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {

                        _PK_Producto = Convert.ToInt32(ds.Tables[0].Rows[0]["PK_Producto"]);
                        _Consecutivo = ds.Tables[0].Rows[0]["Consecutivo "].ToString();
                        _FK_Genero = Convert.ToInt32(ds.Tables[0].Rows[0]["FK_Genero"]);
                        _DescGenero = ds.Tables[0].Rows[0]["DescGenero"].ToString();
                        _FK_Pais = Convert.ToInt32(ds.Tables[0].Rows[0]["FK_Pais"]);
                        _DescPais = ds.Tables[0].Rows[0]["DescPais"].ToString();
                        _FK_Idioma = Convert.ToInt32(ds.Tables[0].Rows[0]["FK_Idioma"]);
                        _DescIdioma = ds.Tables[0].Rows[0]["DescIdioma "].ToString();
                        _Prod_Nombre = ds.Tables[0].Rows[0]["Prod_Nombre"].ToString();
                        _Prod_Ano = Convert.ToInt32(ds.Tables[0].Rows[0]["Prod_Ano"]);
                        _Prod_Precio = Convert.ToDecimal(ds.Tables[0].Rows[0]["Prod_Precio"]);
                        _Prod_Disco = ds.Tables[0].Rows[0]["Prod_Disco"].ToString();
                        _Prod_TipoInterpretacion = Convert.ToInt32(ds.Tables[0].Rows[0]["Prod_TipoInterpretacion"]);
                        _TipoInterpDesc = ds.Tables[0].Rows[0]["TipoInterpDesc"].ToString();
                        _Prod_NombreVisualizcion = ds.Tables[0].Rows[0]["rod_NombreVisualizcion"].ToString();
                        _Prod_NombrePreVisualizcion = ds.Tables[0].Rows[0]["FK_TipoProducto"].ToString();
                        _FK_TipoProducto = Convert.ToInt32(ds.Tables[0].Rows[0]["FK_TipoProducto"]);
                        _Prod_Matriz = ds.Tables[0].Rows[0]["Prod_Matriz"].ToString();
                    }
                    else
                    {
                        _Prod_Nombre = "Error";
                        _num_error = numero_error;
                        _mensaje = mensaje_error;
                    }
                }
            }
        }

    

    

        #endregion


        #region Peliculas
       
        public DataSet carga_lista_peliculas()
        {
            conexion = cls_DAL.trae_conexion("Progra5", ref mensaje_error, ref numero_error);
            if (conexion == null)
            {
                //insertar en la table de errores
                insertaError();
                 HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                return null;
            }
            else
            {
                sql = "usp_PeliculasConsultar";
                ds = cls_DAL.ejecuta_dataset(conexion, sql, true, ref mensaje_error, ref numero_error);
                if (numero_error != 0)
                {
                    //insertar en la table de errores
                    insertaError();
                     HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                    return null;
                }
                else
                {
                    return ds;
                }
            }

        }

    

        public void carga_datos_pelicula(int cod_pelicula)
        {
            conexion = cls_DAL.trae_conexion("Progra5", ref mensaje_error, ref numero_error);
            if (conexion == null)
            {
                //insertar en la table de errores
                insertaError();
                HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
            }
            else
            {
                sql = "usp_Pelicula_InfoConsultar";
                ParamStruct[] parametros = new ParamStruct[1];
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 0, "@PK_Producto", SqlDbType.Int, cod_pelicula);
                ds = cls_DAL.ejecuta_dataset(conexion, sql, true, parametros, ref mensaje_error, ref numero_error);
                if (numero_error != 0)
                {
                    //insertar en la table de errores
                    insertaError();
                    HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                }
                else
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {

                        _PK_Producto = Convert.ToInt32(ds.Tables[0].Rows[0]["PK_Producto"]);
                        _Consecutivo = ds.Tables[0].Rows[0]["Consecutivo "].ToString();
                        _FK_Genero = Convert.ToInt32(ds.Tables[0].Rows[0]["FK_Genero"]);
                        _DescGenero = ds.Tables[0].Rows[0]["DescGenero"].ToString();
                        _FK_Pais = Convert.ToInt32(ds.Tables[0].Rows[0]["FK_Pais"]);
                        _DescPais = ds.Tables[0].Rows[0]["DescPais"].ToString();
                        _FK_Idioma = Convert.ToInt32(ds.Tables[0].Rows[0]["FK_Idioma"]);
                        _DescIdioma = ds.Tables[0].Rows[0]["DescIdioma "].ToString();
                        _Prod_Nombre = ds.Tables[0].Rows[0]["Prod_Nombre"].ToString();
                        _Prod_Ano = Convert.ToInt32(ds.Tables[0].Rows[0]["Prod_Ano"]);
                        _Prod_Precio = Convert.ToDecimal(ds.Tables[0].Rows[0]["Prod_Precio"]);
                        _Prod_Disco = ds.Tables[0].Rows[0]["Prod_Disco"].ToString();
                        _Prod_TipoInterpretacion = Convert.ToInt32(ds.Tables[0].Rows[0]["Prod_TipoInterpretacion"]);
                        _TipoInterpDesc = ds.Tables[0].Rows[0]["TipoInterpDesc"].ToString();
                        _Prod_NombreVisualizcion = ds.Tables[0].Rows[0]["rod_NombreVisualizcion"].ToString();
                        _Prod_NombrePreVisualizcion = ds.Tables[0].Rows[0]["FK_TipoProducto"].ToString();
                        _FK_TipoProducto = Convert.ToInt32(ds.Tables[0].Rows[0]["FK_TipoProducto"]);
                        _Prod_Matriz = ds.Tables[0].Rows[0]["Prod_Matriz"].ToString();
                    }
                    else
                    {
                        _Prod_Nombre = "Error";
                        _num_error = numero_error;
                        _mensaje = mensaje_error;
                    }
                }
            }
        }


        #endregion

        #region musica
       
        public DataSet carga_lista_musica()
        {
            conexion = cls_DAL.trae_conexion("Progra5", ref mensaje_error, ref numero_error);
            if (conexion == null)
            {
                //insertar en la table de errores
                insertaError();
                 HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                return null;
            }
            else
            {
                sql = "usp_MusicaConsultar";
                ds = cls_DAL.ejecuta_dataset(conexion, sql, true, ref mensaje_error, ref numero_error);
                if (numero_error != 0)
                {
                    //insertar en la table de errores
                    insertaError();
                     HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                    return null;
                }
                else
                {
                    return ds;
                }
            }

        }


        public void carga_datos_musica(int cod_musica)
        {
            conexion = cls_DAL.trae_conexion("Progra5", ref mensaje_error, ref numero_error);
            if (conexion == null)
            {
                //insertar en la table de errores
                insertaError();
                HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
            }
            else
            {
                sql = "usp_Musica_InfoConsultar";
                ParamStruct[] parametros = new ParamStruct[1];
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 0, "@PK_Producto", SqlDbType.Int, cod_musica);
                ds = cls_DAL.ejecuta_dataset(conexion, sql, true, parametros, ref mensaje_error, ref numero_error);
                if (numero_error != 0)
                {
                    //insertar en la table de errores
                    insertaError();
                    HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                }
                else
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {

                        _PK_Producto = Convert.ToInt32(ds.Tables[0].Rows[0]["PK_Producto"]);
                        _Consecutivo = ds.Tables[0].Rows[0]["Consecutivo "].ToString();
                        _FK_Genero = Convert.ToInt32(ds.Tables[0].Rows[0]["FK_Genero"]);
                        _DescGenero = ds.Tables[0].Rows[0]["DescGenero"].ToString();
                        _FK_Pais = Convert.ToInt32(ds.Tables[0].Rows[0]["FK_Pais"]);
                        _DescPais = ds.Tables[0].Rows[0]["DescPais"].ToString();
                        _FK_Idioma = Convert.ToInt32(ds.Tables[0].Rows[0]["FK_Idioma"]);
                        _DescIdioma = ds.Tables[0].Rows[0]["DescIdioma "].ToString();
                        _Prod_Nombre = ds.Tables[0].Rows[0]["Prod_Nombre"].ToString();
                        _Prod_Ano = Convert.ToInt32(ds.Tables[0].Rows[0]["Prod_Ano"]);
                        _Prod_Precio = Convert.ToDecimal(ds.Tables[0].Rows[0]["Prod_Precio"]);
                        _Prod_Disco = ds.Tables[0].Rows[0]["Prod_Disco"].ToString();
                        _Prod_TipoInterpretacion = Convert.ToInt32(ds.Tables[0].Rows[0]["Prod_TipoInterpretacion"]);
                        _TipoInterpDesc = ds.Tables[0].Rows[0]["TipoInterpDesc"].ToString();
                        _Prod_NombreVisualizcion = ds.Tables[0].Rows[0]["rod_NombreVisualizcion"].ToString();
                        _Prod_NombrePreVisualizcion = ds.Tables[0].Rows[0]["FK_TipoProducto"].ToString();
                        _FK_TipoProducto = Convert.ToInt32(ds.Tables[0].Rows[0]["FK_TipoProducto"]);
                        _Prod_Matriz = ds.Tables[0].Rows[0]["Prod_Matriz"].ToString();
                    }
                    else
                    {
                        _Prod_Nombre = "Error";
                        _num_error = numero_error;
                        _mensaje = mensaje_error;
                    }
                }
            }
        }

    
        #endregion

        #endregion
    }
}
